home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 314.adf / Zc / zcsrc.lzh / IOLib / stdio / stat.c < prev    next >
C/C++ Source or Header  |  1989-06-15  |  2KB  |  71 lines

  1. #include <libraries/dos.h>      /* For FileInfo struct */
  2. #include <exec/memory.h>        /* For MEMF defines ... */
  3. #include "types.h"
  4. #include "stat.h"
  5. #define ERROR    -1
  6.  
  7. /*
  8.  *  Manx stat() currently isn't very unix compatible, so we roll our
  9.  *  own...
  10.  */
  11.  
  12. typedef struct stat STAT;
  13.  
  14. stat (path, buf)
  15. char *path;
  16. register STAT *buf;
  17. {
  18.     long lck;
  19.     struct FileInfoBlock *fp;
  20.     register long prot;
  21.     register long ftime;
  22.     extern long Lock ();
  23.     extern void *AllocMem ();
  24.  
  25.     if ((lck = Lock (path, ACCESS_READ)) == 0) {
  26.         return (-1);
  27.     }
  28.     fp = (struct FileInfoBlock *)
  29.         AllocMem ((long) sizeof (struct FileInfoBlock),
  30.         (long) (MEMF_CLEAR | MEMF_CHIP));
  31.     Examine (lck, fp);
  32.     if (fp -> fib_DirEntryType > 0) {
  33.         buf -> st_mode = S_IFDIR;
  34.     } else {
  35.         buf -> st_mode = S_IFREG;
  36.     }
  37.     prot = ~(fp -> fib_Protection >> 1);
  38.     prot &= 0x7;
  39.     buf -> st_mode |= (prot << 6 | prot << 3 | prot);
  40.     buf -> st_nlink = 1;
  41.     buf -> st_size = fp -> fib_Size;
  42.     ftime = fp -> fib_Date.ds_Days * (60L * 60L * 24L);
  43.     ftime += fp -> fib_Date.ds_Minute * 60;
  44.     ftime += fp -> fib_Date.ds_Tick / TICKS_PER_SECOND;
  45.     buf -> st_atime = ftime;
  46.     buf -> st_mtime = ftime;
  47.     buf -> st_ctime = ftime;
  48.     buf -> st_ino = 0;
  49.     buf -> st_dev = 0;
  50.     buf -> st_rdev = 0;
  51.     buf -> st_uid = 0;
  52.     buf -> st_gid = 0;
  53.     FreeMem (fp, (long) sizeof (struct FileInfoBlock));
  54.     UnLock (lck);
  55.     return (0);
  56. }
  57.  
  58. long fsize(name)
  59. char *name;
  60. {
  61.     STAT    data;
  62.  
  63.     if(!access(name, 0x00)){
  64.         stat( name, &data );
  65.         return(data.st_size);
  66.     }
  67.  
  68.     return(ERROR);
  69. }
  70.  
  71.